package com.sprouting.personal.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sprouting.personal.dao.DictDao;
import com.sprouting.personal.dao.DictGroupDao;
import com.sprouting.personal.interfaces.common.Constant;
import com.sprouting.personal.model.entity.Dict;
import com.sprouting.personal.model.entity.DictGroup;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 字典
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2022/7/29 8:42
 */
@Service
@Slf4j
public class DictService extends ServiceImpl<DictDao, Dict> {

    @Resource
    private DictDao dictDao;
    @Resource
    private DictGroupDao dictGroupDao;



    /**
     * 查询各种类型数据，查询自己以及公共数据
     * @param dictGroupCode 字典组代码，来源 {@link Constant.RetainDictGroup}
     * @param userId 当前用户ID
     * @return
     */
    public List<Dict> getType(String dictGroupCode, String userId){
        DictGroup dictGroup = dictGroupDao.getDictGroupByIdAndCode(null, dictGroupCode, userId);
        if (dictGroup == null){
            return new ArrayList<>();
        }
        return dictDao.getDictByGroupId(dictGroup.getId(), userId);
    }

    /**
     * 根据字典组ID查询字典
     * @param groupId 字典组ID
     * @param userId 用户ID
     * @return
     */
    public List<Dict> getDictByGroupId(String groupId, String userId) {
        return dictDao.getDictByGroupId(groupId, userId);
    }

    /**
     * 查询字典
     * @param page 分页
     * @param dict 字典参数
     * @return
     */
    public Page<Dict> getDictListPage(Page page, Dict dict) {
        return dictDao.getDictListPage(page, dict);
    }

    /**
     * 根据字典组ID、字典代码、字典ID（传了则忽略该ID）查询 字典
     * @param id 字典ID，传了则忽略该ID
     * @param code 字典代码
     * @param groupId 字典组ID
     * @param userId 用户ID
     * @return
     */
    public Dict getDictByGroupIdAndCodeAndId(String id, String code, String groupId, String userId) {
        return dictDao.getDictByGroupIdAndCodeAndId(id, code, groupId, userId);
    }

    /**
     * 根据字典组ID查询字典
     * @param id 字典
     * @return
     */
    public Dict getDictById(String id) {
        return dictDao.getDictById(id);
    }

    /**
     * 根据ID查询字典，批量查询
     * @param idList 字典ID
     * @return
     */
    public List<Dict> getDictByIdList(List<String> idList) {
        return dictDao.getDictByIdList(idList);
    }
}
